package com.ssyt.yt1.day3.array;

/**
 * 数组定义的两种方式（数组是定长的！）
 * 
 * @author hsu.
 * @version v1.0
 *
 */
public class ArrayDefined {

	/**
	 * 生成一个随机值
	 * 
	 * @return
	 */
	public static int getScore() {
		return (int) Math.ceil(Math.random() * 28);
	}

	/**
	 * 动态定义
	 */
	public static void dynamicDefined() {
		// 声明数组，存在栈里面，null就表示没有堆的指向
		int[] scores = null;
		// 分配空间，在堆内存里分配3个空间，里面只能存3个值，数组的下标是从0开始
		scores = new int[3];

		// 动态添加值
		scores[0] = 1;
		// CTRL + ALT + 上/下
		scores[1] = 2;
		scores[2] = 3;
		scores[2] = 4;
		// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:3
		// scores[3] = getScore();

		// 取单个值
		// System.out.println(scores[1]);
		// for (int value : scores) {
		// System.out.println(value);
		// }

		// 一个堆内存可以被多个栈内存指向
		int[] scores2 = null;
		scores2 = scores;
		int[] scores3 = scores2;
		scores3[2] = 3;

		for (int value : scores) {
			System.out.println(value);
		}
	}

	/**
	 * 静态数组的定义
	 * 
	 */
	public static void staticDefined() {
		// int[] scores = new int[] { 1, 3, 3};
		// 静态数组定义的简写方法
		int[] scores = { 1, 3, 3 };

		scores[1] = 2;

		for (int value : scores) {
			System.out.println(value);
		}
	}

	/**
	 * 程序入口
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// dynamicDefined();
		staticDefined();
	}
}
